package repository

import (
	"GIN-API/internal/models"
	"errors"
	"gorm.io/gorm"
)

type CoverRepository struct {
	db *gorm.DB
}

func NewCoverRepo(db *gorm.DB) *CoverRepository {
	return &CoverRepository{db: db}
}

// CreateCover 创建封面
func (cr *CoverRepository) CreateCover(cover *models.Cover) (*models.Cover, error) {
	// 执行插入操作
	if err := cr.db.Create(cover).Error; err != nil {
		return nil, err
	}
	// 此时 cover.ID 已被自动赋值
	return cover, nil
}

// GetCoverByID 根据封面 ID 获取封面信息
func (cr *CoverRepository) GetCoverByID(id uint) (*models.Cover, error) {
	var cover models.Cover
	err := cr.db.First(&cover, id).Error
	if err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			return nil, nil
		}
		return nil, err
	}
	return &cover, nil
}

// UpdateCover 更新封面信息
func (cr *CoverRepository) UpdateCover(cover *models.Cover) error {
	return cr.db.Model(cover).Updates(cover).Error
}

// DeleteCover 根据封面 ID 删除封面
func (cr *CoverRepository) DeleteCover(id uint) error {
	return cr.db.Delete(&models.Cover{}, id).Error
}

// GetAllCovers 获取所有封面
func (cr *CoverRepository) GetAllCovers() ([]*models.Cover, error) {
	var covers []*models.Cover
	err := cr.db.Find(&covers).Error
	if err != nil {
		return nil, err
	}
	return covers, nil
}
